
package com.siashan.unipay4j.wx.model.refund;

import com.alibaba.fastjson.annotation.JSONField;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

/**
 * 审请退款接口响应
 *
 * @author siashan
 * @since 2.0.1
 */
@Getter
@Setter
@NoArgsConstructor
public class ApplyRefundResponse {

    /**
     * 微信支付退款单号
     */
    @JSONField(name = "refund_id")
    private String refundId;
    /**
     * 商户退款单号
     *
     * @apiNote 商户系统内部的退款单号，商户系统内部唯一，只能是数字、大小写字母_-|*@ ，同一退款单号多次请求只退一笔。
     */
    @JSONField(name = "out_refund_no")
    private String outRefundNo;

    /**
     * 原支付交易对应的微信订单号
     *
     * @apiNote 与out_trade_no 二选一
     */
    @JSONField(name = "transaction_id")
    private String transactionId;
    /**
     * 原支付交易对应的商户订单号
     */
    @JSONField(name = "out_trade_no")
    private String outTradeNo;
    /**
     * 退款渠道
     *
     * @apiNote 枚举值：
     * ORIGINAL：原路退款
     * BALANCE：退回到余额
     * OTHER_BALANCE：原账户异常退到其他余额账户
     * OTHER_BANKCARD：原银行卡异常退到其他银行卡
     * 示例值：ORIGINAL
     */
    private String channel;
    /**
     * 退款入账账户
     *
     * @apiNote 取当前退款单的退款入账方，有以下几种情况：
     * 1）退回银行卡：{银行名称}{卡类型}{卡尾号}
     * 2）退回支付用户零钱:支付用户零钱
     * 3）退还商户:商户基本账户商户结算银行账户
     * 4）退回支付用户零钱通:支付用户零钱通
     * 示例值：招商银行信用卡0403
     */
    @JSONField(name = "user_received_account")
    private String userReceivedAccount;


    /**
     * 退款成功时间
     *
     * @apiNote 退款成功时间，当退款状态为退款成功时有返回。
     * 示例值：2020-12-01T16:18:12+08:00
     */
    @JSONField(name = "success_time")
    private String successTime;
    /**
     * 退款创建时间
     *
     * @apiNote 退款受理时间
     * 示例值：2020-12-01T16:18:12+08:00
     */
    @JSONField(name = "create_time")
    private String createTime;


    /**
     * 退款状态
     *
     * @apiNote 退款到银行发现用户的卡作废或者冻结了，导致原路退款银行卡失败，可前往商户平台-交易中心，手动处理此笔退款。
     * 枚举值：
     * SUCCESS：退款成功
     * CLOSED：退款关闭
     * PROCESSING：退款处理中
     * ABNORMAL：退款异常
     * 示例值：SUCCESS
     */
    private String status;


    /**
     * 退款资金来源
     *
     *
     * @apiNote 退款所使用资金对应的资金账户类型
     * 枚举值：
     * UNSETTLED : 未结算资金
     * AVAILABLE : 可用余额
     * UNAVAILABLE : 不可用余额
     * OPERATION : 运营户
     * BASIC : 基本账户（含可用余额和不可用余额）
     * 示例值：UNSETTLED
     */
    @JSONField(name = "funds_account")
    private String fundsAccount;

    /**
     * 金额信息
     */
    private RefundAmountResponse amount;


    /**
     * 优惠退款信息
     *
     * @apiNote 优惠退款信息
     */
    @JSONField(name = "promotion_detail")
   private RefundPromotionDetail[] promotionDetail;
}
